ファイルサイズが 10 MB 以下でも API Gateway で REQUEST_TOO_LARGE が発生する理由を教えてください
困っていた内容
API Gateway から S3 へファイルをアップロードするアプリケーションを構築しています。
API Gateway には 10 MB のペイロードサイズ制限がありますが、ファイルサイズが 10 MB 以下のリクエストでも REQUEST_TOO_LARGE
のエラーが発生しました。
ファイルサイズが 10 MB 以下でも API Gateway で REQUEST_TOO_LARGE が発生する理由を教えてください。
どう対応すればいいの?
アップロードされるファイルは Base64 形式に変換することによってサイズが増加するため、サイズ増加後のファイルサイズが 10 MB を超過している可能性があります。
Base64 の 1 文字はデータのちょうど 6 ビット分を表します。そのため、入力される文字列やバイナリーファイルに含まれる 3 バイト(3×8 ビット = 24 ビット)は、4 桁の Base64 で表されます(4×6 = 24 ビット)。 このことにより、Base64 で表された文字列またはファイルは、元のサイズの 133% の大きさになると言えます(33% の増加)。
上記を踏まえ、Base64 形式への変換後のファイルサイズを考慮する必要がある点にご注意ください。
なお、API Gateway のペイロード上限を超えるサイズのファイルをアップロードしたい場合には、API Gateway から Lambda 関数等を呼び出して署名付き URL を返却する方法をご検討ください。